#include "MsgNode.h"

#include "Const.h"
#include "iostream"

RecvNode::RecvNode(const short data_len, const short msg_id)
    : _data(nullptr), _total_len(data_len), _current_len(0), _msg_id(msg_id) {
    _data = new char[data_len + 1];
    _data[data_len] = '\0';
}

void RecvNode::Clear() {
    memset(_data, 0, _total_len);
    _current_len = 0;
}


SendNode::SendNode(const char *msg, const short body_len, const short msg_id)
    : _data(nullptr), _total_len(body_len + MSG_HEAD_AND_ID_LEN), _current_len(0), _msg_id(msg_id) {
    _data = new char[body_len + 4];
    //前两个字节为消息ID
    const auto msg_id_host = boost::asio::detail::socket_ops::host_to_network_short(msg_id);
    memcpy(_data, &msg_id_host, MSG_ID_LEN);
    //3-4字节为消息长度
    const auto msg_len_host = boost::asio::detail::socket_ops::host_to_network_short(body_len);
    memcpy(_data + 2, &msg_len_host, MSG_SIZE_LEN);
    //剩余字节为消息内容
    memcpy(_data + 4, msg, body_len);
}
